package com.moss.cloud.base.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moss.cloud.base.api.model.from.BaseFrom;
import com.moss.cloud.base.api.model.from.DeptFrom;
import com.moss.cloud.base.api.model.param.DeptParam;
import com.moss.cloud.common.base.model.po.SysDept;
import com.moss.cloud.common.core.model.vo.BaseProTree;
import com.moss.cloud.common.core.model.vo.DeptTreeVO;

import java.util.List;

/**
 * 部门业务接口
 *
 * @author 瑾年
 * @date 2023年4月9日
 */
public interface ISysDeptService extends IService<SysDept> {

    /**
     * 根据ID查找部门信息
     *
     * @param deptId
     * @return
     */
    SysDept findById(Long deptId);

    /**
     * 根据当前部门ID查找当前部门及其子部门
     *
     * @return
     */
    List<SysDept> sysDepts(Long deptId);

    /**
     * 是否为当前用户的部门以及下属部门
     *
     * @param userDeptId
     * @param deptId
     * @return
     */
    Boolean isUserSubDept(Long userDeptId, Long deptId);

    /**
     * 租户部门树查询
     *
     * @param deptParam
     * @return
     */
    List<BaseProTree> deptTree(DeptParam deptParam);

    /**
     * 租户部门树全量数据查询
     *
     * @param deptParam
     * @return
     */
    IPage<DeptTreeVO> allDeptTree(DeptParam deptParam);

    /**
     * 新增部门
     *
     * @param deptFrom
     * @return
     */
    boolean saveDept(DeptFrom deptFrom);

    /**
     * 更新部门
     *
     * @param deptFrom
     * @return
     */
    boolean updateDept(DeptFrom deptFrom);

    /**
     * 删除部门
     *
     * @param baseFrom
     * @return
     */
    boolean removeDept(BaseFrom baseFrom);

}
